package pers.wchen.mybatis.generate.tag;

import pers.wchen.mybatis.generate.model.DataComposeVO;
import pers.wchen.mybatis.generate.model.DatabaseTablePropertyVO;
import pers.wchen.mybatis.generate.model.FileInfoVO;
import pers.wchen.mybatis.generate.util.SysConstant;
import java.util.Set;

/**
 * @作者： wchen
 * @描述： 通过模板和数据对标签进行替换处理
 * @创建时间： 2018/2/12 17:49
 * @版本：Copyright 2018, Inc. All Rights Reserved.
 * @修改信息：
 */
public class XMLTagManager extends AbsTagManager{
    public XMLTagManager(DataComposeVO dataComposeVO, String tableName, String buildFileTag) {
        super(dataComposeVO, tableName, buildFileTag);
    }

    /**
     * @param templateStr
     * @描述: 替换头部
     * @参数：
     * @返回值：
     * @创建人: wchen
     * @创建时间: 2018/2/13
     * @修改人和其它信息:
     */
    public String replaceFileParam(String templateStr) {
        FileInfoVO fileInfoVO = this.fileInfoMap.get(this.buildFileTag);
        FileInfoVO voFileInfo = this.fileInfoMap.get(SysConstant.KEY_VO);
        String replaceTemplateStr = templateStr.replace("&{param.package}", fileInfoVO.getPackageName())
                .replace("&{param.voClassName}", voFileInfo.getClassName())
                .replace("&{param.tableName}", this.tableName)
                .replace("&{param.voLowerClassName}", voFileInfo.getLowerClassName())

                ;
//        System.out.println("替换参数后的字符串");
//        System.out.println(replaceTemplateStr);
        return replaceTemplateStr;
    }

    /**
     * @param dealLine
     * @描述: 循环标签处理
     * @参数：
     * @返回值：
     * @创建人: wchen
     * @创建时间: 2018/2/13
     * @修改人和其它信息:
     */
    public String replaceLoopStock(String dealLine, Set<String> exIncludeFields) {
        StringBuffer loopSbf = new StringBuffer();


        for(DatabaseTablePropertyVO propertiesVO : this.databaseTablePropertyVOS){
            if(exIncludeFields.contains(propertiesVO.getField())){
                System.out.println("包含" + propertiesVO.getField());
                continue;
            }

            loopSbf.append(dealLine
                    .replace("&{param.voFieldName}", propertiesVO.getTransField())
                    .replace("&{param.tableFieldName}", propertiesVO.getField())
                    .replace("&{param.jdbcType}", propertiesVO.getJdbcType())
            ).append("\n");
        }
        return loopSbf.toString();
    }


}
